package main

import (
	"fmt"
)

type People struct {} //创建人结构体

func (p *People) ShowA()  { //人这个结构体可以实现方法showA
	fmt.Println("showA")
	p.ShowB() //人这个结构体实现ShowB这个方法
}
func (p *People) ShowB()  { //人这个结构体可以实现方法showB
	fmt.Println("showB")
}
type Teacher struct { //创建这Teacher这个结构体
	People //集成人这个结构体的所有方法。
}
func (t *Teacher) ShowA()  { //重写ShowB方法
	fmt.Println("teacher showA")
}
func (t *Teacher) ShowB()  { //重写ShowB方法
	fmt.Println("teacher showB")
}
func main()  {
	t:=Teacher{ }//创建Teacher结构体对象
	//下面两种写法等价
	t.ShowA() //实现方法ShowA
	t.People.ShowA()
}

/*
答：输出结果ShowA,ShowB
因为Teacher这个结构体集成了People的所有方法，所以实现t.ShowA输出showA
然后t.ShowA方法中又实现了ShowB方法。虽然Teacher重写了ShowB,但是Teacher没去实现这个方法。就不会输出teacher showB

*/
